﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace RayTracer.Structures
{
    /// <summary>
    /// Modelliert einen OpenCL Byte16
    /// </summary>
    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct Byte16
    {
        #region Attribute
        /// <summary>
        /// Gibt und setzt den Wert von s0.
        /// </summary>
        public byte s0;

        /// <summary>
        /// Gibt und setzt den Wert von s1.
        /// </summary>
        public byte s1;

        /// <summary>
        /// Gibt und setzt den Wert von s2.
        /// </summary>
        public byte s2;

        /// <summary>
        /// Gibt und setzt den Wert von s3.
        /// </summary>
        public byte s3;

        /// <summary>
        /// Gibt und setzt den Wert von s4.
        /// </summary>
        public byte s4;

        /// <summary>
        /// Gibt und setzt den Wert von s5.
        /// </summary>
        public byte s5;

        /// <summary>
        /// Gibt und setzt den Wert von s6.
        /// </summary>
        public byte s6;

        /// <summary>
        /// Gibt und setzt den Wert von s7.
        /// </summary>
        public byte s7;

        /// <summary>
        /// Gibt und setzt den Wert von s8.
        /// </summary>
        public byte s8;

        /// <summary>
        /// Gibt und setzt den Wert von s9.
        /// </summary>
        public byte s9;

        /// <summary>
        /// Gibt und setzt den Wert von sa.
        /// </summary>
        public byte sa;

        /// <summary>
        /// Gibt und setzt den Wert von sb.
        /// </summary>
        public byte sb;

        /// <summary>
        /// Gibt und setzt den Wert von sc.
        /// </summary>
        public byte sc;

        /// <summary>
        /// Gibt und setzt den Wert von sd.
        /// </summary>
        public byte sd;

        /// <summary>
        /// Gibt und setzt den Wert von se.
        /// </summary>
        public byte se;

        /// <summary>
        /// Gibt und setzt den Wert von sf.
        /// </summary>
        public byte sf;
        #endregion Attribute

        #region Methoden
        /// <summary>
        /// Initialisiert die Struktur mit Werten.
        /// </summary>
        /// <param name="s0">Der Wert für s0.</param>
        /// <param name="s1">Der Wert für s1.</param>
        /// <param name="s2">Der Wert für s2.</param>
        /// <param name="s3">Der Wert für s3.</param>
        /// <param name="s4">Der Wert für s4.</param>
        /// <param name="s5">Der Wert für s5.</param>
        /// <param name="s6">Der Wert für s6.</param>
        /// <param name="s7">Der Wert für s7.</param>
        /// <param name="s8">Der Wert für s8.</param>
        /// <param name="s9">Der Wert für s9.</param>
        /// <param name="sa">Der Wert für sa.</param>
        /// <param name="sb">Der Wert für sb.</param>
        /// <param name="sc">Der Wert für sc.</param>
        /// <param name="sd">Der Wert für sd.</param>
        /// <param name="se">Der Wert für se.</param>
        /// <param name="sf">Der Wert für sf.</param>
        public Byte16(byte s0, byte s1, byte s2, byte s3, byte s4, byte s5, byte s6, byte s7,
                      byte s8, byte s9, byte sa, byte sb, byte sc, byte sd, byte se, byte sf)
        {
            this.s0 = s0;
            this.s1 = s1;
            this.s2 = s2;
            this.s3 = s3;
            this.s4 = s4;
            this.s5 = s5;
            this.s6 = s6;
            this.s7 = s7;
            this.s8 = s8;
            this.s9 = s9;
            this.sa = sa;
            this.sb = sb;
            this.sc = sc;
            this.sd = sd;
            this.se = se;
            this.sf = sf;
        }

        /// <summary>
        /// Gibt eine Zeichenkettenrepräsentation der Struktur zurück.
        /// </summary>
        /// <returns>Die Zeichenkette.</returns>
        public override string ToString()
        {
            return "s0: " + s0.ToString() +
                   " s1: " + s1.ToString() +
                   " s2: " + s2.ToString() +
                   " s3: " + s3.ToString() +
                   " s4: " + s4.ToString() +
                   " s5: " + s5.ToString() +
                   " s6: " + s6.ToString() +
                   " s7: " + s7.ToString() +
                   " s8: " + s8.ToString() +
                   " s9: " + s9.ToString() +
                   " sa: " + sa.ToString() +
                   " sb: " + sb.ToString() +
                   " sc: " + sc.ToString() +
                   " sd: " + sd.ToString() +
                   " se: " + se.ToString() +
                   " sf: " + sf.ToString();
        }
        #endregion Methoden
    }
}


